package Packaged;

import java.util.TreeMap;

public class TestWater {
    public static void main(String[] args) {
        // 创建一个数组存储矿泉水对象
        Packagedwater[] array =  new Packagedwater[3];
        // 2.创建矿泉水对象并添加到数组当中
        Packagedwater num1 = new Packagedwater("侗乐山泉","天然泉水",1.5,560);
        Packagedwater num2 = new Packagedwater("农夫山泉","天然水",2.0,550);

        //3.把学生对象添加到数组当中
        array[0]= num1;
        array[1]= num2;

        // 要求1：再次添加一个矿泉水对象，
        Packagedwater num3 = new Packagedwater("百岁山","天然矿泉水",3,570);
        // 判断矿泉水的名是否唯一（矿泉水的名称不存在重复）
        boolean flag = conta(array, num3.getName());
        if (flag) {
            // 已存在--不用添加
            System.out.println("当前矿泉水已经存在，请修改后再添加");
        }else {
            // 不存在，需要添加
            //1.数组已经满。
            //2.未存满,直接添加
            int count = getCount(array);
            if (count == array.length) {
                // 已经存满
                // 创建一个新的数组，长度=原数组长度+1
                // 更新，拷贝原数组元素到新数组
                Packagedwater[] newArray = creaArray(array);    // 调用方法完成更新
                // 把num3添加进去
                newArray[count]=num3;

                // 添加完成后进行遍历所有矿泉水信息

                traverse(newArray);
            }else {
                // 没有存储满
                array[count] = num3;
                // 遍历
                traverse(array);
            }

        }
        // 要求3：根据矿泉水名称，如农夫山泉或者百岁山删除元素
        int index = getIndex(array, "侗乐山泉");
        if (index >=0) {
            // 存在，删除
            array[index] = null;
            // 遍历信息
            traverse(array);
        }else {
            // 不存在，删除失败
            System.out.println("当前矿泉水不存在，删除失败");
        }

        // 要求5：修改农夫山泉的价格(有些贩卖机农夫山泉卖1.5块钱，以最低销售价修改)
        // 先找到农夫山泉的下标
        int index2 = getIndex(array,"农夫山泉");

        // 判断下标是否存在
        if (index2 >= 0) {
            // 存在下标，修改价格
            Packagedwater stu = array[index2];
            double newPrice = stu.getPrice() -0.5;
            //存储回去
            stu.setPrice(newPrice);
            System.out.println("修改后的价格："+array[index2].getPrice());
        }else {
            // 不存在，直接提示
            System.out.println("当前矿泉水不存在，修改失败");
        }
    }


    // 唯一性判断
    public static boolean conta(Packagedwater[] arrs, String id){
        for (int i =0;i < arrs.length; i++){
            Packagedwater stu = arrs[i];
            if (stu != null) {
                String sid = stu.getName();
                // 对比
                if (sid.equals(id)) {
                    return true;
                }
            }
        }
        // 当for循环结束后，没有匹配到一样的，那么就返回不存在.
        return false;
    }

    //统计数组元素

    public static int getCount(Packagedwater[] ls){
        // 统计数组长度的。
        int cnt = 0;
        for (int i = 0; i < ls.length; i++) {
            if (ls[i] != null) {
                cnt++;
            }
        }
        // 循环结束返回数组长度
        return cnt;
    }

    // 数组长度更新
    public static Packagedwater[] creaArray(Packagedwater[] ary){
        Packagedwater[] newArray = new Packagedwater[ary.length + 1];   // 数组长度加1

        // for循环把原数组元素拷贝到新的数组当中
        for (int i = 0; i < ary.length; i++) {
            // 把传入的原数组对象ary添加到新的数组对象newArray
            newArray[i] = ary[i];
        }

        // 返回
        return newArray;
    }

    // 遍历数组方法
    public static void traverse(Packagedwater[] ay){
        for (int i = 0; i < ay.length; i++) {
            Packagedwater nm = ay[i];
            if (nm != null) {
                System.out.print("矿泉水名称：" + nm.getName() + "  配料："+nm.getDosing() + "  单价：" );
                System.out.println(nm.getPrice() + "  净含量："+nm.getContent());
            }
        }
        System.out.println();
    }

    // 要求3的查找id方法
    public static int getIndex(Packagedwater[] ay,String uname){
        for (int i = 0; i < ay.length; i++) {
            // 依次判断
            if (ay[i] != null) {
                String sname = ay[i].getName();
                if (sname.equals(uname)) {
                    return i;   // 返回要删除元素的下标
                }
            }
        }

        // 当然循环结束后，未找到返回-1
        return -1;
    }
}
